home *** CD-ROM | disk | FTP | other *** search
/ Aminet 24 / Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso / Aminet / dev / c / AmiVoGL_MDEV.lha / examples / shapes.c < prev    next >
C/C++ Source or Header  |  1994-07-15  |  4KB  |  146 lines

  1. #include <stdio.h>
  2.  
  3. #ifdef SGI
  4. #include "gl.h"
  5. #include "device.h"
  6. #include "hershey.h"
  7. #else
  8. #include "vogl.h"
  9. #include "vodevice.h"
  10. #endif
  11.  
  12. /*
  13.  * This program shows some of the simple primitives.
  14.  */
  15. int main(void)
  16. {
  17.     Screencoord    minx, maxx, miny, maxy, edgelength;
  18.     short        val;
  19.  
  20.     winopen("shapes");
  21.  
  22.     /*
  23.      * the two lines below clear the screen to white if we have
  24.      * colours, on a monochrome device color is ignored so the
  25.      * screen will be cleared to its background color, normally black.
  26.      */
  27.     color(BLACK);
  28.     clear();
  29.  
  30.     /*
  31.      * set the screen to be 2.0 units wide and 2.0 units wide, with
  32.      * the drawable coordinates going from -1.0 to 1.0.
  33.      */
  34.     ortho2(-1.0, 1.0, -1.0, 1.0);
  35.  
  36.     color(MAGENTA);
  37.  
  38.     /*
  39.      * okay, so we want to draw in the range -1 to 1, but we
  40.      * only want to draw in the top lefthand corner of the
  41.      * screen. The call to viewport allows us to do this. As
  42.      * viewport always takes screen coordinates, we need to
  43.      * call getviewport to found out how big our screen is
  44.      * at the moment. We use the values returned from getviewport
  45.      * calculate the positions for our new viewport. We note
  46.      * that on an Iris (0,0) is the bottom left pixel.
  47.      */
  48.     getviewport(&minx, &maxx, &miny, &maxy);
  49.  
  50.     viewport(minx, (maxx - minx) / 2, (maxy - miny) / 2, maxy);
  51.  
  52.     cmov2(-0.9, -0.5);        /* write out a heading */
  53.     charstr("rect");
  54.  
  55.     /*
  56.      * draw a rectangle around the points (-0.2, -0.2), (-0.2, 0.2),
  57.      * (0.3, 0.2), and (0.3, -0.2).
  58.      */
  59.     rect(-0.2, -0.2, 0.3, 0.2);
  60.  
  61.     color(BLUE);
  62.  
  63.     /*
  64.      * now we want to draw in the top right corner of the screen,
  65.      * and we want to draw a circular circle so we must make sure
  66.      * our viewport is square (if it isn't we'll get an ellipse),
  67.      * so we calculate the shortest edge and set up a viewport which
  68.      * is in the top right region of the screen, but doesn't necessarilly
  69.      * occupy all the top right corner.
  70.      */
  71.                         /* find smallest edge */
  72.     if (maxx - minx > maxy - miny)
  73.         edgelength = (maxy - miny) / 2;
  74.     else 
  75.         edgelength = (maxx - minx) / 2;
  76.  
  77.                         /* create a square viewport */
  78.  
  79.     viewport((maxx - minx) / 2, (maxx - minx) / 2 + edgelength, (maxy - miny) / 2, (maxy - miny) / 2 + edgelength);
  80.  
  81.     cmov2(-0.9, -0.5);
  82.     charstr("circle");
  83.  
  84.     /*
  85.      * draw a circle of radius 0.4 around the point (0.0, 0.0)
  86.      */
  87.     circ(0.0, 0.0, 0.4);
  88.  
  89.     color(GREEN);
  90.  
  91.     /*
  92.      * bottom left hand corner.
  93.      */
  94.     viewport(minx, (maxx - minx) / 2, miny, (maxy - miny) / 2);
  95.  
  96.     cmov2(-0.9, -0.5);
  97.     charstr("ellipse");
  98.  
  99.     /*
  100.      * To draw an ellipse we change the aspect ratio so it is no longer
  101.      * 1 and call circ. In this case we use ortho2 to make the square
  102.      * viewport appear to be higher than it is wide. Alternatively you
  103.      * could use arc to construct one.
  104.      *
  105.      * The call to pushmatrix saves the current viewing transformation.
  106.      * After the ortho2 has been done, we restore the current viewing
  107.      * transformation with a call to popmatrix. (Otherwise everything
  108.      * after the call to ortho would come out looking squashed as the
  109.      * world aspect ratio is no longer 1).
  110.      */
  111.     pushmatrix();
  112.         ortho2(-1.0, 1.0, -1.0, 2.0);
  113.         circ(0.0, 0.5, 0.4);
  114.     popmatrix();
  115.  
  116.     color(RED);
  117.  
  118.     /*
  119.      * bottom right hand corner
  120.      */
  121.     viewport((maxx - minx) / 2, maxx, miny, (maxy - miny) / 2);
  122.  
  123.     cmov2(-0.9, -0.5);
  124.     charstr("arc");
  125.  
  126.     /*
  127.      * draw an arc centered at (0.0, 0.0), radius of 0.4. 0.0 is the start
  128.      * angle and 90.0 is the end angle of the arc being drawn. So this
  129.      * draws a quarter circle - unless our viewport isn't square.
  130.      */
  131.     arc(0.0, 0.0, 0.4, 0, 900);
  132.  
  133.     /*
  134.      * enable the keyboard
  135.      */
  136.     qdevice(KEYBD);
  137.     unqdevice(INPUTCHANGE);
  138.  
  139.     /*
  140.      * wait for the event
  141.      */
  142.     qread(&val);
  143.  
  144.     gexit();
  145. }
  146.